css: short-circuit gtk_css_dimension_value_try_add
authorTimm Bäder <mail@baedert.org>
Thu, 7 Nov 2019 06:32:03 +0000 (07:32 +0100)
committerTimm Bäder <mail@baedert.org>
Thu, 14 Nov 2019 08:15:58 +0000 (09:15 +0100)
No need to allocate a new css value for something that we already have,
because one of the two values is 0

gtk/gtkcsscalcvalue.c
gtk/gtkcssdimensionvalue.c
gtk/gtkcssnumbervalue.c
gtk/gtkcssnumbervalueprivate.h

index 929d971bd7c36111155fe8812211b81a7e30418a..8a5ea6b065d23deaccc6dba902e8e7469215e7bf 100644 (file)
@@ -228,8 +228,8 @@ gtk_css_value_calc_multiply (const GtkCssValue *value,
 }
 
 static GtkCssValue *
-gtk_css_value_calc_try_add (const GtkCssValue *value1,
-                            const GtkCssValue *value2)
+gtk_css_value_calc_try_add (GtkCssValue *value1,
+                            GtkCssValue *value2)
 {
   return NULL;
 }
index d545b65e205c0afd6779df882ea1303249518603..1e9e758e6303209956e8ed7679e3dffb6a193aba 100644 (file)
@@ -235,12 +235,18 @@ gtk_css_value_dimension_multiply (const GtkCssValue *value,
 }
 
 static GtkCssValue *
-gtk_css_value_dimension_try_add (const GtkCssValue *value1,
-                                 const GtkCssValue *value2)
+gtk_css_value_dimension_try_add (GtkCssValue *value1,
+                                 GtkCssValue *value2)
 {
   if (value1->unit != value2->unit)
     return NULL;
 
+  if (value1->value == 0)
+    return _gtk_css_value_ref (value2);
+
+  if (value2->value == 0)
+    return _gtk_css_value_ref (value1);
+
   return gtk_css_dimension_value_new (value1->value + value2->value, value1->unit);
 }
 
index e8543bea28ccfb64710df674246b12559e0f0ef7..f5e574c81d0a85201e2eb0d52895828d4eef4ef6 100644 (file)
@@ -66,8 +66,8 @@ gtk_css_number_value_add (GtkCssValue *value1,
 }
 
 GtkCssValue *
-gtk_css_number_value_try_add (const GtkCssValue *value1,
-                              const GtkCssValue *value2)
+gtk_css_number_value_try_add (GtkCssValue *value1,
+                              GtkCssValue *value2)
 {
   GtkCssNumberValueClass *number_value_class;
   
index faf7dad5c9c8435f6ae92a8f3be6efd184f5a50a..e18b69afcba78f9e34856a90282cf3fbbb9120e2 100644 (file)
@@ -46,8 +46,8 @@ struct _GtkCssNumberValueClass {
   gboolean              (* has_percent)             (const GtkCssValue      *value);
   GtkCssValue *         (* multiply)                (const GtkCssValue      *value,
                                                      double                  factor);
-  GtkCssValue *         (* try_add)                 (const GtkCssValue      *value1,
-                                                     const GtkCssValue      *value2);
+  GtkCssValue *         (* try_add)                 (GtkCssValue            *value1,
+                                                     GtkCssValue            *value2);
   gint                  (* get_calc_term_order)     (const GtkCssValue      *value);
 };
 
@@ -67,8 +67,8 @@ GtkCssValue *   gtk_css_number_value_multiply       (const GtkCssValue      *val
                                                      double                  factor);
 GtkCssValue *   gtk_css_number_value_add            (GtkCssValue            *value1,
                                                      GtkCssValue            *value2);
-GtkCssValue *   gtk_css_number_value_try_add        (const GtkCssValue      *value1,
-                                                     const GtkCssValue      *value2);
+GtkCssValue *   gtk_css_number_value_try_add        (GtkCssValue            *value1,
+                                                     GtkCssValue            *value2);
 gint            gtk_css_number_value_get_calc_term_order (const GtkCssValue *value);
 
 double          _gtk_css_number_value_get           (const GtkCssValue      *number,